Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Persistent collections updates (part 7) #182

Merged
merged 11 commits into from
Sep 23, 2022

Conversation

lorentey
Copy link
Member

This fixes the Iterator type (slowing it down by 35% or so, unfortunately), and starts work on PersistentSet. (Including (untested) structural isSubset and isDisjoint tests, but no structural merges yet.)

Checklist

  • I've read the Contribution Guidelines
  • My contributions are licensed under the Swift license.
  • I've followed the coding style of the rest of the project.
  • I've added tests covering all new code paths my change adds to the project (if appropriate).
  • I've added benchmarks covering new functionality (if appropriate).
  • I've verified that my change does not break any existing tests or introduce unexplained benchmark regressions.
  • I've updated the documentation if necessary.

@msteindorfer
Copy link
Contributor

In general, in case keys are objects, should be consider checking for object identity (i.e., ===) in the persistent collections before calling ==?

Can this be achieved in a single method implementation, or would one need to duplicate the method and add a constraint like Key: AnyObject?

Copy link
Contributor

@msteindorfer msteindorfer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Change list:

  • Verify / fix potential issue with semantics of isDisjoint.

Otherwise, LGTM.

Great work on implementing the initial structural operations (i.e., isDisjoint and isSubset) that form the blueprint for structural set-algebra operations, and structural filters, transformations, and (dictionary) merges.

@@ -116,9 +116,14 @@ extension _Bitmap {
}

extension _Bitmap {
@inlinable @inline(__always)
internal func isSubset(of other: Self) -> Bool {
_value & ~other._value == 0
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

Sources/PersistentCollections/Node/_Node+isDisjoint.swift Outdated Show resolved Hide resolved
Comment on lines +15 to +19
@inlinable @inline(never)
internal func isDisjoint<Value2>(
_ level: _Level,
with other: _Node<Key, Value2>
) -> Bool {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider adding benchmarks for isDisjoint and other structural operations.

Structural operations with persistent data structures have an inherent benefit over performing those operations on a logical level. Hence, it would be great to highlight those differences with benchmarks.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep.

Note: Benchmarking these well is a challenge -- the state space is so large, and the behavior is so dependent on the random hash seed, that it's hard to come up with something that truly demonstrates practical benefits.

Sources/PersistentCollections/Node/_Node+isEqual.swift Outdated Show resolved Hide resolved
Comment on lines 17 to 40
#if arch(x86_64) || arch(arm64)
@inlinable
@inline(__always)
internal static var capacity: Int { 13 }

@usableFromInline
internal var _contents: (
Element, Element, Element, Element,
Element, Element, Element, Element,
Element, Element, Element, Element,
Element
)
#else
@inlinable
@inline(__always)
internal static var capacity: Int { 7 }

// xxxxx xxxxx xxxxx xxxxx xxxxx xxxxx xx
@usableFromInline
internal var _contents: (
Element, Element, Element, Element,
Element, Element, Element
)
#endif
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is hashValue in Swift on 32-bit systems 32 bits as well?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yep! Hasher returns exactly Int-sized globs of bits.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's a shame we have to hardwire these lengths here, by the way, and also that we have to manually list architectures instead of just directly asking the compiler about the size of Int...

// However, this requires a series of `UInt32._bit(ranked:)` invocations
// that may or may not be meaningfully better than simply rehashing the
// key.
// FIXME: We could do this as a structural transformation.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider that structural formations must deal with compaction in order to guarantee a canonical representation, which slightly complicates the matter.

@@ -22,17 +22,13 @@ extension PersistentDictionary {
public func compactMapValues<T>(
_ transform: (Value) throws -> T?
) rethrows -> PersistentDictionary<Key, T> {
// FIXME: We could do this as a structural transformation.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Consider that structural formations must deal with compaction in order to guarantee a canonical representation, which slightly complicates the matter.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It certainly does. Trying to do this in place (for Set.formIntersection and the like) would probably be a fool's errand, but I think an algorithm that constructs a new instance should be reasonably doable! (This is next on my list for part 9, actually. 🤓)

@@ -15,6 +15,7 @@ extension PersistentDictionary {
_ keysAndValues: __owned S,
uniquingKeysWith combine: (Value, Value) throws -> Value
) rethrows where S.Element == (Key, Value) {
// FIXME: Do a structural merge
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

@lorentey
Copy link
Member Author

There isn't really a good way to change behavior based on properties of a generic type argument (other than using the type constraints required in the declaration)

Doing things like foo is AnyObject can backfire pretty badly if the check survives into the generated code (e.g. when foo is of a type that bridges with Objective C).

The === shortcut is best implemented within the Equatable.== implementation of the Key type, like we do for the collection types themselves.

Co-authored-by: Michael Steindorfer <michael@steindorfer.name>
Copy link
Contributor

@msteindorfer msteindorfer left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@lorentey
Copy link
Member Author

@swift-ci test

Comment on lines 15 to 18
internal func isEqual<Value2>(
to other: _Node<Key, Value2>,
by areEquivalent: (Value, Value2) -> Bool
) -> Bool {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is it necessary to introduce the additional generic Value2 here?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This isn't exercised, and there is a chance it won't be, in which case we can remove it later. (But it doesn't really have a performance drawback, so it's no big deal if it stays in.)

The reason I wanted to leave this door open is in case we want to tackle a weird asymmetry in SetAlgebra. It is customary for SetAlgebra types to provide flexible overloads for isSubset/isDisjoint/intersection/etc that can take more types than just Self -- elsewhere I usually have an unconstrained generic overload that can take any Sequence plus a handful of concrete overloads for select types for which I can do a more efficient implementation. (So e.g. OrderedSet provides not only isSubset(of other: Self), but also isSubset(of other: Set<Element>) and isSubset(of other: some Sequence<Element>).) The asymmetry I find weird is that this applies to all such operations except Equatable.== -- why can't I easily check if a Set and an OrderedSet contain exactly the same members?

In the case of PersistentSet, we currently have isSubset(of:) defined for Self and PersistentDictionary<Element, T>.Keys arguments. (Later on we will also need one that can take any SetAlgebra and one that can take any Sequence.) If we do end up adding an isEqual(to:) family of methods that generalize ==, then we will need to this particular flavor of generic definition in _Node to be able to compare a persistent set to the Keys view of any persistent dictionary that has a matching Key type.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(I wrote this up (well, copy-pasted from above) as #183.)

@lorentey
Copy link
Member Author

@swift-ci test

@lorentey lorentey merged commit b1a45f0 into apple:release/1.1 Sep 23, 2022
@lorentey lorentey added this to the 1.1.0 milestone Oct 10, 2022
@lorentey lorentey added the HashTreeCollections Hash-array mapped prefix tree implementations label Nov 15, 2022
cgrindel-self-hosted-renovate bot referenced this pull request in cgrindel/rules_swift_package_manager Feb 8, 2024
…v1.1.0 (#906)

This PR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
|
[com_github_apple_swift_collections](https://togithub.com/apple/swift-collections)
| http_archive | minor | `1.0.6` -> `1.1.0` |

---

### Release Notes

<details>
<summary>apple/swift-collections
(com_github_apple_swift_collections)</summary>

###
[`v1.1.0`](https://togithub.com/apple/swift-collections/releases/tag/1.1.0):
Swift Collections 1.1.0

[Compare
Source](https://togithub.com/apple/swift-collections/compare/1.0.6...1.1.0)

This feature release adds a number of new data structure
implementations, along with minor changes to existing constructs.

##### New Data Structures

- `Heap` implements a min-max heap, backed by a native array.
(Contributed by [@&#8203;AquaGeek](https://togithub.com/AquaGeek))
- `BitSet` and `BitArray` are two alternate representations of a bitmap
type, backed by dynamically allocated storage. (Contributed by
[@&#8203;MahanazAtiqullah](https://togithub.com/MahanazAtiqullah))
- `TreeSet` and `TreeDictionary` are hashed collections implementing
Compressed Hash-Array Mapped Prefix Trees (CHAMP). They provide similar
API as `Set`/`Dictionary` in the Standard Library, but as persistent
data structures, supporting incremental mutations of shared instances
and efficient structural diffing. (Contributed by
[@&#8203;msteindorfer](https://togithub.com/msteindorfer))

##### Other Changes

- This version of the package can only be built using Swift 5.7 or
later.
- New methods: the `OrderedSet.isEqualSet` family of functions provide a
way to test that two containers contain the same members, ignoring the
order of elements.
([https://github.com/apple/swift-collections/issues/183](https://togithub.com/apple/swift-collections/issues/183),
[https://github.com/apple/swift-collections/pull/234](https://togithub.com/apple/swift-collections/pull/234))
- New method: `OrderedSet.filter` implements a version of the standard
filter operation that returns an `OrderedSet` instead of an `Array`.
([https://github.com/apple/swift-collections/pull/159](https://togithub.com/apple/swift-collections/pull/159))
- `debugDescription` implementations have been updated to follow Swift
best practice. (These are called by container types like `Array` to
print their elements, so they work best when they're succinct variants
of `description` that are suitable for embedding in structured output:
specifically, they must not produce unpaired delimiter characters
(`[`/`]`, `(`/`)`, `{`/`}`, `<`/`>` etc), raw top level commas,
semicolons, colons, unquoted strings etc. `debugDescription` should not
needlessly print type names etc.)

##### New Contributors

- [@&#8203;AquaGeek](https://togithub.com/AquaGeek) made their first
contribution in
[https://github.com/apple/swift-collections/pull/61](https://togithub.com/apple/swift-collections/pull/61)
- [@&#8203;ejmarchant](https://togithub.com/ejmarchant) made their first
contribution in
[https://github.com/apple/swift-collections/pull/82](https://togithub.com/apple/swift-collections/pull/82)
- [@&#8203;just-gull](https://togithub.com/just-gull) made their first
contribution in
[https://github.com/apple/swift-collections/pull/115](https://togithub.com/apple/swift-collections/pull/115)
- [@&#8203;jPaolantonio](https://togithub.com/jPaolantonio) made their
first contribution in
[https://github.com/apple/swift-collections/pull/121](https://togithub.com/apple/swift-collections/pull/121)
- [@&#8203;MahanazAtiqullah](https://togithub.com/MahanazAtiqullah) made
their first contribution in
[https://github.com/apple/swift-collections/pull/83](https://togithub.com/apple/swift-collections/pull/83)
- [@&#8203;hectormatos2011](https://togithub.com/hectormatos2011) made
their first contribution in
[https://github.com/apple/swift-collections/pull/155](https://togithub.com/apple/swift-collections/pull/155)
- [@&#8203;ktoso](https://togithub.com/ktoso) made their first
contribution in
[https://github.com/apple/swift-collections/pull/159](https://togithub.com/apple/swift-collections/pull/159)
- [@&#8203;CTMacUser](https://togithub.com/CTMacUser) made their first
contribution in
[https://github.com/apple/swift-collections/pull/116](https://togithub.com/apple/swift-collections/pull/116)
- [@&#8203;hassila](https://togithub.com/hassila) made their first
contribution in
[https://github.com/apple/swift-collections/pull/297](https://togithub.com/apple/swift-collections/pull/297)

Many thanks to our contributors for their great work (and patience)!

##### List of Pull Requests

**Full Changelog**:
apple/swift-collections@1.0.6...1.1.0

- Add a min-max heap implementation that can be used to back a priority
queue by [@&#8203;AquaGeek](https://togithub.com/AquaGeek) in
[https://github.com/apple/swift-collections/pull/61](https://togithub.com/apple/swift-collections/pull/61)
- \[benchmark] Review and extend Heap benchmarks by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/76](https://togithub.com/apple/swift-collections/pull/76)
- Add reference benchmarks for bit vector implementations by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/79](https://togithub.com/apple/swift-collections/pull/79)
- Fix Markdown link in README by
[@&#8203;AquaGeek](https://togithub.com/AquaGeek) in
[https://github.com/apple/swift-collections/pull/77](https://togithub.com/apple/swift-collections/pull/77)
- Fix documentation for types conforming to ExpressibleByArrayLiteral o…
by [@&#8203;ejmarchant](https://togithub.com/ejmarchant) in
[https://github.com/apple/swift-collections/pull/82](https://togithub.com/apple/swift-collections/pull/82)
- \[Heap] Performance tweaks by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/78](https://togithub.com/apple/swift-collections/pull/78)
- Fix typos: missing subscript parameters by
[@&#8203;ejmarchant](https://togithub.com/ejmarchant) in
[https://github.com/apple/swift-collections/pull/81](https://togithub.com/apple/swift-collections/pull/81)
- \[Heap] Update implementation details section in docs by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/84](https://togithub.com/apple/swift-collections/pull/84)
- Update CMakeLists.txt by
[@&#8203;compnerd](https://togithub.com/compnerd) in
[https://github.com/apple/swift-collections/pull/85](https://togithub.com/apple/swift-collections/pull/85)
- Stop depending on swift-collections-benchmark by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/86](https://togithub.com/apple/swift-collections/pull/86)
- \[OrderedDictionary] modifyValue → updateValue by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/91](https://togithub.com/apple/swift-collections/pull/91)
- Add Benchmarks package to workspace by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/93](https://togithub.com/apple/swift-collections/pull/93)
- \[OrderedDictionary] Deprecate `subscript(offset:)` for now by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/92](https://togithub.com/apple/swift-collections/pull/92)
- Documentation: Remove in-place mutation comments by
[@&#8203;ejmarchant](https://togithub.com/ejmarchant) in
[https://github.com/apple/swift-collections/pull/96](https://togithub.com/apple/swift-collections/pull/96)
- \[main] Freeze some types for consistency with their inlinable
initializers by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/98](https://togithub.com/apple/swift-collections/pull/98)
- Follow stdlib's leading underscore rule by
[@&#8203;ejmarchant](https://togithub.com/ejmarchant) in
[https://github.com/apple/swift-collections/pull/95](https://togithub.com/apple/swift-collections/pull/95)
- \[Heap] Disable heap tests in release builds by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/100](https://togithub.com/apple/swift-collections/pull/100)
- \[NFC] Merge release/1.0 to main by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/105](https://togithub.com/apple/swift-collections/pull/105)
- Merge `release/1.0` into `main` by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/108](https://togithub.com/apple/swift-collections/pull/108)
- \[README] Note that `Heap` hasn't been tagged yet & list other
enhancements in progress by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/109](https://togithub.com/apple/swift-collections/pull/109)
- PriorityQueueModule: remove `import Foundation` by
[@&#8203;compnerd](https://togithub.com/compnerd) in
[https://github.com/apple/swift-collections/pull/118](https://togithub.com/apple/swift-collections/pull/118)
- \[Heap] Remove Heap's `ascending` and `descending` views by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/119](https://togithub.com/apple/swift-collections/pull/119)
- \[Heap] Enable heap tests in optimized builds
([#&#8203;101](https://togithub.com/apple/swift-collections/issues/101))
by [@&#8203;just-gull](https://togithub.com/just-gull) in
[https://github.com/apple/swift-collections/pull/115](https://togithub.com/apple/swift-collections/pull/115)
- Update CMakeLists.txt by
[@&#8203;compnerd](https://togithub.com/compnerd) in
[https://github.com/apple/swift-collections/pull/122](https://togithub.com/apple/swift-collections/pull/122)
- Fix link to package internal documentation by
[@&#8203;jPaolantonio](https://togithub.com/jPaolantonio) in
[https://github.com/apple/swift-collections/pull/121](https://togithub.com/apple/swift-collections/pull/121)
- Merge release/1.0 to main by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/130](https://togithub.com/apple/swift-collections/pull/130)
- BitArray and BitSet data structures by
[@&#8203;MahanazAtiqullah](https://togithub.com/MahanazAtiqullah) in
[https://github.com/apple/swift-collections/pull/83](https://togithub.com/apple/swift-collections/pull/83)
- Sorted collections by [@&#8203;vihanb](https://togithub.com/vihanb) in
[https://github.com/apple/swift-collections/pull/65](https://togithub.com/apple/swift-collections/pull/65)
- Merge `release/1.0` to `main` by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/141](https://togithub.com/apple/swift-collections/pull/141)
- Remove Swift PM Artifacts to avoid Generated Schemes in Xcode by
[@&#8203;hectormatos2011](https://togithub.com/hectormatos2011) in
[https://github.com/apple/swift-collections/pull/155](https://togithub.com/apple/swift-collections/pull/155)
- Reinstate custom schemes under Utils/swift-collections.xcworkspace by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/156](https://togithub.com/apple/swift-collections/pull/156)
- \+OrderedSet add filter
[#&#8203;158](https://togithub.com/apple/swift-collections/issues/158)
by [@&#8203;ktoso](https://togithub.com/ktoso) in
[https://github.com/apple/swift-collections/pull/159](https://togithub.com/apple/swift-collections/pull/159)
- \[Xcode] Update schemes & file template by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/161](https://togithub.com/apple/swift-collections/pull/161)
- \[OrderedCollection] Use standard temp allocation facility, if
available by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/160](https://togithub.com/apple/swift-collections/pull/160)
- \[OrderedSet] Work around weird name lookup issue in compiler by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/162](https://togithub.com/apple/swift-collections/pull/162)
- \=OrderedSet.filter Attempt to optimize filter impl by
[@&#8203;ktoso](https://togithub.com/ktoso) in
[https://github.com/apple/swift-collections/pull/163](https://togithub.com/apple/swift-collections/pull/163)
- Force-inline \_modify accessors to work around a performance issue by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/165](https://togithub.com/apple/swift-collections/pull/165)
- Merge release/1.0 branch to main by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/172](https://togithub.com/apple/swift-collections/pull/172)
- Incubate persistent data structures by
[@&#8203;msteindorfer](https://togithub.com/msteindorfer) in
[https://github.com/apple/swift-collections/pull/31](https://togithub.com/apple/swift-collections/pull/31)
- Persistent collections updates by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/174](https://togithub.com/apple/swift-collections/pull/174)
- Persistent collections updates by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/175](https://togithub.com/apple/swift-collections/pull/175)
- Persistent collections updates (part 3) by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/176](https://togithub.com/apple/swift-collections/pull/176)
- Persistent collections updates (part 4) by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/177](https://togithub.com/apple/swift-collections/pull/177)
- \[OrderedDictionary] Tiny documentation fix by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/178](https://togithub.com/apple/swift-collections/pull/178)
- Persistent collections updates (part 5) by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/179](https://togithub.com/apple/swift-collections/pull/179)
- Integrate PriorityQueueModule, BitCollections, PersistentCollections,
SortedCollections into release/1.1 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/181](https://togithub.com/apple/swift-collections/pull/181)
- Persistent collections updates (part 6) by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/180](https://togithub.com/apple/swift-collections/pull/180)
- Persistent collections updates (part 7) by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/182](https://togithub.com/apple/swift-collections/pull/182)
- \[BitSet] Fix decoding format on 32 bit architectures by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/185](https://togithub.com/apple/swift-collections/pull/185)
- Persistent collections updates (part 8) by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/184](https://togithub.com/apple/swift-collections/pull/184)
- Persistent collections updates (part 9) by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/188](https://togithub.com/apple/swift-collections/pull/188)
- Add Sendable conformances to all public types by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/191](https://togithub.com/apple/swift-collections/pull/191)
- \[test] Check baseline API expectations for set-like types by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/192](https://togithub.com/apple/swift-collections/pull/192)
- Fleshing out `PersistentSet` by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/193](https://togithub.com/apple/swift-collections/pull/193)
- Rename `PriorityQueueModule` to `HeapModule` by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/194](https://togithub.com/apple/swift-collections/pull/194)
- \[BitSet] Fix invariant violation in member subscript by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/195](https://togithub.com/apple/swift-collections/pull/195)
- \[1.1.0] Bump minimum required Swift toolchain to 5.5 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/196](https://togithub.com/apple/swift-collections/pull/196)
- Restore support for building with Swift 5.5 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/198](https://togithub.com/apple/swift-collections/pull/198)
- Merge release/1.0 to release/1.1 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/199](https://togithub.com/apple/swift-collections/pull/199)
- Update CMake configuration in preparation for 1.1 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/200](https://togithub.com/apple/swift-collections/pull/200)
- Update CMakeLists.txt by
[@&#8203;compnerd](https://togithub.com/compnerd) in
[https://github.com/apple/swift-collections/pull/202](https://togithub.com/apple/swift-collections/pull/202)
- \[1.1]\[SortedCollections] Remove for now by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/205](https://togithub.com/apple/swift-collections/pull/205)
- \[Heap] Change value of minimum or maximum element by
[@&#8203;CTMacUser](https://togithub.com/CTMacUser) in
[https://github.com/apple/swift-collections/pull/116](https://togithub.com/apple/swift-collections/pull/116)
- \[Heap] Prerelease preparations by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/210](https://togithub.com/apple/swift-collections/pull/210)
- Update README files by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/212](https://togithub.com/apple/swift-collections/pull/212)
- \[manifest] Exclude CMakeLists.txt; remove unnecessary path settings;
reindent file by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/213](https://togithub.com/apple/swift-collections/pull/213)
- Review and finalize (?) set relation predicates for 1.1 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/216](https://togithub.com/apple/swift-collections/pull/216)
- Merge.1.0→1.1 by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/217](https://togithub.com/apple/swift-collections/pull/217)
- Update CMake configuration by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/218](https://togithub.com/apple/swift-collections/pull/218)
- Cherry pick changes from main to release/1.1 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/219](https://togithub.com/apple/swift-collections/pull/219)
- Fix unusual build problems by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/221](https://togithub.com/apple/swift-collections/pull/221)
- Review & update descriptions throughout the package by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/222](https://togithub.com/apple/swift-collections/pull/222)
- Review and finalize (?) binary set operations for 1.1 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/223](https://togithub.com/apple/swift-collections/pull/223)
- \[Xcode] Disable implicit dependencies by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/227](https://togithub.com/apple/swift-collections/pull/227)
- \[OrderedSet] Improve sequence-taking initializer by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/226](https://togithub.com/apple/swift-collections/pull/226)
- \[OrderedSet, BitSet] Fix custom mirror display style by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/225](https://togithub.com/apple/swift-collections/pull/225)
- Finalize persistent collections API by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/224](https://togithub.com/apple/swift-collections/pull/224)
- Start working on DocC support by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/228](https://togithub.com/apple/swift-collections/pull/228)
- Update CMake build configuration by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/230](https://togithub.com/apple/swift-collections/pull/230)
- \[PersistentSet] Iterator.next(): Make inlinable by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/233](https://togithub.com/apple/swift-collections/pull/233)
- \[SetAlgebra types] isEqual(to:) → isEqualSet(to:) by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/234](https://togithub.com/apple/swift-collections/pull/234)
- \[PersistentCollections] Doc & benchmark updates in preparation of API
review by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/235](https://togithub.com/apple/swift-collections/pull/235)
- Apply changes from in-progress review thread by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/237](https://togithub.com/apple/swift-collections/pull/237)
- \[ShareableHashedCollections] API Review: add missing `mutating`
keywords by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/238](https://togithub.com/apple/swift-collections/pull/238)
- \[Benchmarks] Split default huge library up into individual files, one
per type by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/240](https://togithub.com/apple/swift-collections/pull/240)
- \[ShareableHashedCollections] Add missing import by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/243](https://togithub.com/apple/swift-collections/pull/243)
- Unify unsafe bit set implementations by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/244](https://togithub.com/apple/swift-collections/pull/244)
- Fix warnings in development versions of Swift by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/245](https://togithub.com/apple/swift-collections/pull/245)
- \[HashTreeCollections] Change prefix `Shareable` to `Tree` by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/242](https://togithub.com/apple/swift-collections/pull/242)
- \[TreeDictionary] Fix in-place merge operation to properly update the
count by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/247](https://togithub.com/apple/swift-collections/pull/247)
- \[cmake] Update CMake configuration by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/249](https://togithub.com/apple/swift-collections/pull/249)
- Add not so experimental rope implementation by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/264](https://togithub.com/apple/swift-collections/pull/264)
- Fix off by one error in BitSet by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/267](https://togithub.com/apple/swift-collections/pull/267)
- Monomodule support by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/266](https://togithub.com/apple/swift-collections/pull/266)
- Expose a handful of BigString.Index methods by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/269](https://togithub.com/apple/swift-collections/pull/269)
- BitArray API refinements & additions by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/263](https://togithub.com/apple/swift-collections/pull/263)
- Make most of Rope inlinable by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/270](https://togithub.com/apple/swift-collections/pull/270)
- BigString: Fix String.Index.\_knownScalarAligned by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/272](https://togithub.com/apple/swift-collections/pull/272)
- Rope: Fix `Sendable` conformance by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/271](https://togithub.com/apple/swift-collections/pull/271)
- Require Swift 5.6 by [@&#8203;lorentey](https://togithub.com/lorentey)
in
[https://github.com/apple/swift-collections/pull/273](https://togithub.com/apple/swift-collections/pull/273)
- \[OrderedDictionary] Explicitly mention in documentation that
keys/values are ordered by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/275](https://togithub.com/apple/swift-collections/pull/275)
- \[HashCollections] Ensure `self` doesn’t get destroyed before we’re
done working with it by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/276](https://togithub.com/apple/swift-collections/pull/276)
- Remove obsolete swift(>=5.5)/swift(>=5.6) checks by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/277](https://togithub.com/apple/swift-collections/pull/277)
- \[Xcode] Update Xcode project by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/278](https://togithub.com/apple/swift-collections/pull/278)
- Minor rope updates by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/279](https://togithub.com/apple/swift-collections/pull/279)
- \[Rope] remove(at:): Fix assertion when removing the last item creates
a deficiency by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/280](https://togithub.com/apple/swift-collections/pull/280)
- Merge changes from release 1.0 to release 1.1 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/283](https://togithub.com/apple/swift-collections/pull/283)
- \[CollectionUtilities] Silence a warning on 32 bit platforms by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/286](https://togithub.com/apple/swift-collections/pull/286)
- \[BitSet] Fix a thinko in BitSet.isEqualSet by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/287](https://togithub.com/apple/swift-collections/pull/287)
- Grab bag of fixes for small test issues by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/288](https://togithub.com/apple/swift-collections/pull/288)
- \[Xcode] Set a code sign identity in the Xcode project by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/285](https://togithub.com/apple/swift-collections/pull/285)
- Rope: Fix trap when replaceSubrange is called on an empty rope by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/290](https://togithub.com/apple/swift-collections/pull/290)
- `Rope.find` returns a bogus remainder for the end position by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/291](https://togithub.com/apple/swift-collections/pull/291)
- Update TreeSet.md by [@&#8203;hassila](https://togithub.com/hassila)
in
[https://github.com/apple/swift-collections/pull/297](https://togithub.com/apple/swift-collections/pull/297)
- Fix CustomStringConvertible/CustomDebugStringConvertible conformances
by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/302](https://togithub.com/apple/swift-collections/pull/302)
- \[RopeModule] Fix issues in Swift's ABI stable dialect by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/318](https://togithub.com/apple/swift-collections/pull/318)
- \[CMake, Xcode] Update configurations for alternate build systems by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/319](https://togithub.com/apple/swift-collections/pull/319)
- \[RopeModule] Remove unnecessary typealiases by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/320](https://togithub.com/apple/swift-collections/pull/320)
- \[Heap] Improve type-level doc comment by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/326](https://togithub.com/apple/swift-collections/pull/326)
- \[Heap] insert(contentsOf:) Switch to Floyd’s if we’re inserting too
many items by [@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/327](https://togithub.com/apple/swift-collections/pull/327)
- \[1.1] build: support building in Debug mode on Windows by
[@&#8203;compnerd](https://togithub.com/compnerd) in
[https://github.com/apple/swift-collections/pull/336](https://togithub.com/apple/swift-collections/pull/336)
- Merge release/1.0 to release/1.1 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/348](https://togithub.com/apple/swift-collections/pull/348)
- \[Heap] Convert min() and max() to properties by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/328](https://togithub.com/apple/swift-collections/pull/328)
- \[BitArray] Disable bitwise operators for now by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/353](https://togithub.com/apple/swift-collections/pull/353)
- \[Heap] Final(?) Heap API adjustments for 1.1 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/354](https://togithub.com/apple/swift-collections/pull/354)
- \[Benchmarks] Add Collection Equality Benchmarks by
[@&#8203;vanvoorden](https://togithub.com/vanvoorden) in
[https://github.com/apple/swift-collections/pull/351](https://togithub.com/apple/swift-collections/pull/351)
- Release preparations for 1.1 by
[@&#8203;lorentey](https://togithub.com/lorentey) in
[https://github.com/apple/swift-collections/pull/355](https://togithub.com/apple/swift-collections/pull/355)
- \[1.1] Fix typos by [@&#8203;lorentey](https://togithub.com/lorentey)
in
[https://github.com/apple/swift-collections/pull/357](https://togithub.com/apple/swift-collections/pull/357)
- \[TreeDictionary]\[Keys] Add Equatable and Hashable Conformance to
TreeDictionary.Keys by
[@&#8203;vanvoorden](https://togithub.com/vanvoorden) in
[https://github.com/apple/swift-collections/pull/352](https://togithub.com/apple/swift-collections/pull/352)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever PR is behind base branch, or you tick the
rebase/retry checkbox.

👻 **Immortal**: This PR will be recreated if closed unmerged. Get
[config help](https://togithub.com/renovatebot/renovate/discussions) if
that's undesired.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Renovate
Bot](https://togithub.com/renovatebot/renovate).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNi4xMDAuMCIsInVwZGF0ZWRJblZlciI6IjM2LjEwMC4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiJ9-->

Co-authored-by: Self-hosted Renovate Bot <361546+cgrindel-self-hosted-renovate[bot]@users.noreply.github.enterprise.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
HashTreeCollections Hash-array mapped prefix tree implementations
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants